package com.wenli.graduate2022.wenliGreenShop.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * druid数据源的一些设置，因为springboot的yml主配置文件里我们加了一些其他Druid配置，但是springboot的自动配置文件（xx.properties）
 *却没有这些属性，所以我们得自己配置与注入
 * @author HuangHai
 * @date 2021/9/26 14:56
 */
@Configuration   //告诉spring这是一个配置类
public class DruidConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")  //利用该注解可以将自定义类的值填充到相应的属性里
    public DataSource druid(){
        return new DruidDataSource();
    }

    //配置druid的监控页面
    //1.配置一个可以查看后台数据与sql语句运行的页面
    @Bean
    public ServletRegistrationBean statViewServlet(){
        //注册一个监控页面，我们可以用localhost：8848/druid/*去登录后台监控的管理，设置了项目名就要加项目名
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        Map<String, String> initParams = new HashMap<>();  //要设置的参数集合
        initParams.put("loginUsername","admin");   //druid后台监控页面的用户名
        initParams.put("loginPassword","123456");    //密码
        initParams.put("allow","");     //默认允许所有IP访问
        initParams.put("deny","192.168.138.88");    //拒绝访问的IP
        servletRegistrationBean.setInitParameters(initParams);  //进行设置
        return servletRegistrationBean;  //加到spring容器
    }

    //2.配置druid监控的过滤器，哪些不用监控，一般静态资源就不需要监控
    @Bean
    public FilterRegistrationBean webStatFilter(){
        //注册一个web监控过滤器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        Map<String, String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");   //不用监控的路径，一般都是静态资源
        filterRegistrationBean.setInitParameters(initParams);  //设置参数值
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));   //设置要监控的路径
        return filterRegistrationBean;  //加入spring管理
    }
}
